import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import './function_ext.dart';

enum TapType {
  /// 没有任何特性
  none,

  /// 防抖
  throttle,

  /// 防抖+超时
  throttleWithTimeout,

  /// 节流 -就是类式延迟吧
  debounce
}

/// 自定义的点击控件，封装了节流，防抖的事件
class InkWellCustom extends StatelessWidget {
  final Widget child;
  final Function? onTap;


  /// 点击类型
  final TapType type;

  /// 防抖的超时时间
  final int? timeout;

  const InkWellCustom({Key? key, required this.child, this.onTap, this.type = TapType.none, this.timeout})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    final ColorScheme? colorScheme = Theme.of(context).buttonTheme.colorScheme;
    return onTap==null?child: InkWell(
      borderRadius: BorderRadius.all(Radius.circular(5.r)),
      highlightColor: colorScheme?.primary.withOpacity(0.2),
      splashColor: colorScheme?.primary.withOpacity(0.3),
      //点击或者toch控件高亮的shape形状
      // highlightShape: BoxShape.rectangle,
      //.InkResponse内部的radius这个需要注意的是，我们需要半径大于控件的宽，如果radius过小，显示的水波纹就是一个很小的圆，
      //水波纹的半径
      //水波纹的颜色
      //true表示要剪裁水波纹响应的界面 false不剪裁 如果控件是圆角不剪裁的话水波纹是矩形
      // containedInkWell: true,
      onTap: _getOnTap(),
      child: child,
    );
  }

  VoidCallback? _getOnTap() {
    if (type == TapType.throttle) {
      return onTap?.throttle();
    } else if (type == TapType.throttleWithTimeout) {
      return onTap?.throttleWithTimeout(timeout: timeout ?? 500);
    } else if (type == TapType.debounce) {
      return onTap?.debounce(timeout: timeout ?? 500);
    }
    return () => onTap?.call();
  }
}
